package cn.iocoder.yudao.module.system.dal.mysql.exam;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.exam.ExamQuestionDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 测评题目 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface ExamQuestionMapper extends BaseMapperX<ExamQuestionDO> {

    /**
     * 根据appKey和tbl查询题目列表
     *
     * @param appKey API密钥
     * @param tbl 测评类型标记值
     * @return 题目列表
     */
    default List<ExamQuestionDO> selectByAppKeyAndTbl(String appKey, String tbl) {
        return selectList(new LambdaQueryWrapperX<ExamQuestionDO>()
                .eq(ExamQuestionDO::getAppKey, appKey)
                .eqIfPresent(ExamQuestionDO::getTbl, tbl)
                .eq(ExamQuestionDO::getStatus, 1)
                .orderByAsc(ExamQuestionDO::getSort, ExamQuestionDO::getId));
    }

    /**
     * 根据第三方API题目ID查询题目
     *
     * @param appKey API密钥
     * @param apiDetailsId 第三方API题目ID
     * @return 题目信息
     */
    default ExamQuestionDO selectByAppKeyAndApiDetailsId(String appKey, Long apiDetailsId) {
        List<ExamQuestionDO> list = selectList(new LambdaQueryWrapperX<ExamQuestionDO>()
                .eq(ExamQuestionDO::getAppKey, appKey)
                .eq(ExamQuestionDO::getApiDetailsId, apiDetailsId)
                .eq(ExamQuestionDO::getStatus, 1)
                .orderByDesc(ExamQuestionDO::getCreateTime)
                .last("LIMIT 1"));
        return list.isEmpty() ? null : list.get(0);
    }

    /**
     * 根据第三方API题目ID和测评类型查询题目（更精确的查询）
     *
     * @param appKey API密钥
     * @param apiDetailsId 第三方API题目ID
     * @param tbl 测评类型标记值
     * @return 题目信息
     */
    default ExamQuestionDO selectByAppKeyAndApiDetailsIdAndTbl(String appKey, Long apiDetailsId, String tbl) {
        return selectOne(new LambdaQueryWrapperX<ExamQuestionDO>()
                .eq(ExamQuestionDO::getAppKey, appKey)
                .eq(ExamQuestionDO::getApiDetailsId, apiDetailsId)
                .eqIfPresent(ExamQuestionDO::getTbl, tbl)
                .eq(ExamQuestionDO::getStatus, 1));
    }

    /**
     * 根据appKey和tbl删除题目
     *
     * @param appKey API密钥
     * @param tbl 测评类型标记值
     * @return 删除数量
     */
    default int deleteByAppKeyAndTbl(String appKey, String tbl) {
        return delete(new LambdaQueryWrapperX<ExamQuestionDO>()
                .eq(ExamQuestionDO::getAppKey, appKey)
                .eqIfPresent(ExamQuestionDO::getTbl, tbl));
    }

    /**
     * 批量插入题目
     *
     * @param questions 题目列表
     * @return 插入数量
     */
    default int insertBatch(List<ExamQuestionDO> questions) {
        if (questions == null || questions.isEmpty()) {
            return 0;
        }
        
        // 使用MyBatis Plus的批量插入
        for (ExamQuestionDO question : questions) {
            insert(question);
        }
        return questions.size();
    }

}
